package cn.lg.soar.system.biz.modules.general.entity;

import cn.lg.soar.common.enums.LogTypeEnum;
import cn.lg.soar.mvc.enums.LogArgsModeEnum;
import cn.lg.soar.mvc.enums.LogErrorModeEnum;
import cn.lg.soar.mvc.enums.LogResultModeEnum;
import cn.lg.soar.system.api.enums.LogConfigStatusEnum;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Getter;
import lombok.Setter;
import lombok.experimental.Accessors;

import java.io.Serializable;

/**
 * @author luguoxiang
 * 开源项目：https://gitee.com/lgx1992/lg-soar 求star！请给我star！请帮我点个star！
 */
@Getter
@Setter
@Accessors(chain = true)
@Schema(description = "日志配置")
@TableName("lg_sys_log_config")
public class LogConfig implements Serializable {

    private static final long serialVersionUID = 8872546610525568181L;

    @TableId(type = IdType.AUTO)
    private Integer id;

    @Schema(description = "路径")
    private String path;

    @Schema(description = "状态")
    private LogConfigStatusEnum status;

    /**
     * 日志类型
     */
    @Schema(description = "日志类型")
    private LogTypeEnum type;

    /**
     * 日志名称（什么操作）
     */
    @Schema(description = "日志名称")
    private String name;

    /**
     * 内容，支持el表达式，el结果是字符串则保存字符串，是object的保存json数据
     */
    @Schema(description = "内容(el表达式)")
    private String content;

    /**
     * 入参记录模式（保存哪些参数数据）
     */
    @Schema(description = "入参记录模式")
    private LogArgsModeEnum argsMode;

    /**
     * 入参el表达式，argsMode = LogResultModeEnum.el 时有效
     */
    @Schema(description = "入参el表达式")
    private String argsEl;

    /**
     * 入参索引，argsMode = LogResultModeEnum.index 时有效
     */
    @Schema(description = "入参索引")
    private int argsIndex;

    /**
     * 出参记录模式（保存哪些参数数据）
     */
    @Schema(description = "出参记录模式")
    private LogResultModeEnum resultMode;

    /**
     * 出参el表达式，resultMode = LogResultModeEnum.el 时有效
     * 获取结果对象的某个属性：resultEl="属性名"，例如 resultEl="data"
     */
    @Schema(description = "出参el表达式")
    private String resultEl;

    /**
     * 错误记录记录模式（若 errorMode = LogErrorModeEnum.not，则出现异常不记录日志）
     */
    @Schema(description = "错误记录记录模式")
    private LogErrorModeEnum errorMode;

}
